package appIdeasScrumer.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import appIdeasScrumer.excepcion.DAOExcepcion;
import appIdeasScrumer.modelo.Votacion;
import appIdeasScrumer.util.ConexionBD;

public class VotacionDAO extends BaseDAO {


	public Votacion insertarVotacion(Votacion vo) throws DAOExcepcion {
		String query = "";
		//String query = "insert into tc_discusion(COD_IDEA, TXT_DISCUSION, COD_USUARIO, AUD_FECREGISTRO, AUD_FECMODIFICACION, AUD_USUREGISTRO, AUD_USUMODIFICACION, AUD_ESTADO) values (?,?)";
		
		query += "insert into tc_votacion(";
		query += "COD_IDEA, VAL_VOTACION, COD_USUARIO, AUD_FECREGISTRO, AUD_FECMODIFICACION, AUD_USUREGISTRO, AUD_USUMODIFICACION, AUD_ESTADO ";	
		query += ") values(";
		query += "?, ?, ?, now(), now(), ?, ?, ?";
		query += ")";
		
		//System.out.println(query);
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getCodIdea());
			stmt.setInt(2, vo.getValorVotacion());
			stmt.setInt(3, vo.getCodUsuario());
			stmt.setInt(4, vo.getAud_usuregistro());
			stmt.setInt(5, vo.getAud_usumodificacion());
			stmt.setInt(6, vo.getAud_estadologico());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			vo.setCodVotacion(id);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
			
	}

	public Votacion obtenerVotacion(int codIdea, int codUsuario) throws DAOExcepcion {
		Votacion vo = new Votacion();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query ="";
			query += "select COD_VOTACION, COD_IDEA, VAL_VOTACION, COD_USUARIO, COD_VOTACION";
			query += " from tc_votacion where COD_IDEA=? AND COD_USUARIO=?";
			
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, codIdea);
			stmt.setInt(2, codUsuario);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setCodIdea(rs.getInt(1));
				vo.setCodUsuario(rs.getInt(2));		
				vo.setValorVotacion(rs.getInt(3));
				vo.setCodVotacion(rs.getInt(5));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}


	public Votacion actualizaVotacion(Votacion vo) throws DAOExcepcion {
		
		//codVotacion, CoIdea, valVotacion, CoUsuario, audUsuRegistra, audUsuModifica, audEstado
		String query ="";
			
		query += "update tc_votacion set VAL_VOTACION=?, AUD_FECREGISTRO=now(), AUD_FECMODIFICACION=now(), ";
		query += " AUD_USUREGISTRO=?, AUD_USUMODIFICACION=?, AUD_ESTADO=? where COD_VOTACION=?";
		
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getValorVotacion());			
			//stmt.setDate(2, (Date) vo.getAud_fecregistro());
			//stmt.setDate(3, (Date) vo.getAud_fecmodificacion());
			stmt.setInt(2,  vo.getAud_usuregistro());
			stmt.setInt(3, vo.getAud_usumodificacion());
			stmt.setInt(4, vo.getAud_estadologico());
			stmt.setInt(5, vo.getCodVotacion());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	

}
